package com.jd.dlc.domain;

import lombok.Data;

import java.util.List;
import java.util.Set;

/**
 * @program: dlc
 * @ClassName LimiterRule
 * @description: Current limiting rules
 * @author: sizegang
 * @create: 2022-05-11
 **/
@Data
public class LimiterRule {
    /**
     * 接口命名空间
     */
    private String namespace;

    /**
     * 当前接口是否开启限流
     */
    private boolean enable;
    /**
     * 单位秒限流次数
     */
    private long limit;

    private boolean recordLimit;

    /**
     *  黑名单缓存时间
     */
    private Integer recordTime ;
    /**
     * 动态key 截取参数 start
     */
    private Integer truncateStart;

    /**
     * 动态key 截取参数 end
     */
    private Integer truncateEnd;

    /**
     * 灰度比率
     */
    private Integer gray;


    /**
     * Timeout for getting token
     */
    private long timeout = 0;

    /**
     * 累计是否开启
     */
    private boolean advanced;

    /**
     * 累计数量
     */
    private Long limitNum;

    private List<LRule> rules;

    /**
     * 触发限流
     */
    private boolean triggerLimit;

    /**
     * 黑名单
     */
    private Set<String> blackList;

    /**
     * 白名单
     */
    private Set<String> whiteList;

    @Data
    public static class LRule {
        /**
         * 触发限流
         */
        private boolean triggerLimit;
        /**
         * 动态黑名单
         */
        private boolean recordLimit;
        /**
         * 动态黑名单时间
         */
        private Integer recordTime;
        /**
         * 灰度比率
         */
        private Integer gray;
        /**
         * 动态key 截取参数 start
         */
        private Integer truncateStart;
        /**
         * 动态key 截取参数 end
         */
        private Integer truncateEnd;
        /**
         * 是否开启限流
         */
        private boolean enable;
        /**
         * 特殊规则限流key
         */
        private Set<String> keys;
        /**
         * 限流频次
         */
        private long limit;

        private long timeout = 0;

        /**
         * 累计是否开启
         */
        private boolean advanced;

        /**
         * 累计数量
         */
        private Long limitNum;

    }

}
